package com.anysoft.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestInterceptor implements HandlerInterceptor {
    /**
     * preHandle方法在控制器的请求处理方法调用之前执行
     * @param request
     * @param response
     * @param handler
     * @return 返回值表示是否继续后续操作，返回true表示继续，返回false表示中断
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("TestInterceptor：preHandle");
        // 返回值表示是否继续后续操作，返回true表示继续往后执行，返回false表示中断执行
        return true;
    }

    /**
     * postHandle方法在控制器的请求处理方法调用return之后，解析视图之前执行，可以通过此方法对请求域中的模型和视图做进一步的修改
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("TestInterceptor：postHandle");
    }

    /**
     * 该方法在控制器的处理请求方法执行完成后执行，即视图渲染结束后执行，可以通过此方法实现一些资源清理、记录日志信息等工作
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("TestInterceptor：afterCompletion");
    }
}
